package com.itjeffrey.autocode.exception;

import com.itjeffrey.autocode.enums.ExceptionEnum;
import com.itjeffrey.autocode.util.ACBaseUtil;
import lombok.Getter;

import java.text.MessageFormat;

/**
 * 自定义异常类 示例：throw new ACException(ExceptionEnum.INTERVAL_SERVER_EXCEPTION, ...?)
 *
 * @From: Jeffrey
 * @Date: 2020/11/8
 */
@Getter
public class ACException extends RuntimeException {

    private Integer errCode;

    private String errMsg;

    private ExceptionEnum exceptionEnum;

    public ACException(Integer errCode, String errMsg) {
        super(errMsg);
        this.errCode = errCode;
        this.errMsg = errMsg;
    }

    public ACException(ExceptionEnum exceptionEnum) {
        super(exceptionEnum.getErrorMessage());
        this.exceptionEnum = exceptionEnum;
    }

    //基于可变参数的自定义异常
    public ACException(ExceptionEnum exceptionEnum, String... args) {
        String errorMessage = exceptionEnum.getErrorMessage();
        String formatStr = ACBaseUtil.formatMessage(errorMessage, '{', '}');
        String errMsg = MessageFormat.format(formatStr, args);
        throw new ACException(exceptionEnum.getErrorCode(), errMsg);
    }
}
